-------------------------------------------------------------------------- 勤労5号(MuSICA互換ドライバ) 公式規格書 著 者:黒田 圭一 発表者:BTO(MuSICA研究所) (C) 1996,1997 Keiichi Kuroda / BTO(MuSICA Laboratory) All rights reserved. -------------------------------------------------------------------------- -------- ☆初めに --------  この文章は汎用性を持って製作した(つもりの)勤労5号の機能を説明するもの ですが、アセンブラでプログラムすることを前提に書いていますので、アセンブラ の知識が必要です(BASICのみでは勤労5号は使用できません)。  それでは、少しずつ解説をしていきたいと思います。  ちなみにお断りですが、勤労5号は私の技術不足や怠惰な性格のため、いろいろ と不安定な部分もありますが、これも少しずつ直していきたいと思っていますが、 もしいきなり動作が止まっても、ご了承ください(すいません)。 ---------------- ☆勤労5号の特徴 ----------------  勤労5号の特徴として以下のものがあります。 ・SCCゲームカートリッジ・似非SCCラム等もSCC音源のカートリッジとし  て認識。 ・新設命令として、チャンネル単位でマスターボリュームを設定できたり、フェー  ドアウトといった機能を増設。 ・MuSICA解析家として、MuSICA解析して見つかった細かいバグを訂正  (例えば、MMLのWをちゃんと使えるものとしたり)  ただし、変更することによって不都合が起る部分は無修正です。  (例えば、Q設定が変なところ) ・「勤労規格」と称した規格を制定し、コンパイラ(勤労4号)と同時に対応 -------------------- ☆勤労5号のアドレス --------------------  勤労5号は6000Hから置くことによって使えます。  ただし、ドライバのファイル形式がBSAVE形式と同じなので、プログラムの 前に7バイト分付いています。なお、BSAVEのヘッダー部分には開始アドレス を0000Hとしています。  BSAVEのヘッダーが付いていることに気を付けてください。 -------------------------- ☆勤労5号のバージョン番号 --------------------------  勤労5号のバージョンを得たい場合は600EHにバージョンの整数部分が、6 00FHにバージョンの小数部分がBCD形式に入っています。  例を出しますと、バージョンが1.23でしたら、600EHに”01H”、6 00FHに”23H”と入っています。 ---------------------------- ☆勤労5号の公開ワークエリア ----------------------------  勤労5号では以下のワークエリアをユーザーに公開しています。 ・FMSLT (6010H) FM音源のスロット番号です。無い場合は0が入っています。 ・SCCSLT (6011H) SCC音源のスロット番号です。無い場合は0が入っています。  なお、上記のワークエリアを書き換える事は非演奏時に限って行ってください。  また、SCCスロットはイニシャライズの時のみチェックしていますので、後差 しなどをして初期化前にSCCを後から付けた場合はここに書いているSCCSL Tにそのスロット番号を入れておいてください。  なお、音源スロットを間違って指定した場合の動作の保証はありませんので、気 を付けてください。 -------------------------- ☆勤労5号の公開エントリー --------------------------  勤労5号では以下のエントリーをユーザーに公開しています。 ・INITAL (6020H)  入力レジスタ:無し  出力レジスタ:無し  破壊レジスタ:すべて  割り込み状態:割り込み禁止 ※割り込み状態とは、エントリーをコールした後に割り込み状態の変化があるのか  を書いています。 <機能>  勤労5号のイニシャライズです。以下のエントリーを使用するときはからなずコ ールしてください。  なお、ここでFM音源およびSCCのサーチをしています。  SCCをこの初期化した後に後差しした場合は前述の通り、ワークエリアを書き 換えてください。 ・MPLAY1 (6023H)  入力レジスタ:HL BGMデータの先頭アドレス A 繰り返し回数(0で永久ループ)  出力レジスタ:Cフラグ 演奏に失敗した時に1、成功した時0  破壊レジスタ:すべて  割り込み状態:割り込み禁止 <機能>  BGMを演奏します。BGMデータはコンパイルに指定した時と同じアドレスに 置いてください。  なお、バ−ジョン1.00から演奏の成功・失敗を知ることができます(MuS ICAもしくは勤労規格のBGMファイルのチェックを入れています)。 ・MPLAY2 (6026H)  入力レジスタ:HL BGMデータの置いている先頭アドレス DE BGMデータコンパイル時に指定したアドレス A 繰り返し回数(0で永久ループ)  出力レジスタ:Cフラグ 演奏に失敗した時に1、成功した時0  割り込み状態:割り込み禁止 <機能>  BGMを演奏します。MPLAY1と違う点はBGMデータをどこのアドレスに 置いても、置いたアドレスとコンパイル時のアドレスをセットすれば、内部で処理 をして、きっちりと演奏するという点です。  なお、コンパイル時に指定したアドレスはBGMファイルがBSAVE形式と同 じですから、そのヘッダーから得られます。  なお、このバージョン1.00から演奏の失敗・成功が知ることができます(M uSICAもしくは勤労規格のBGMファイルのチェックを入れています)。 ・MINTER (6029H)  入力レジスタ:無し  出力レジスタ:無し  破壊レジスタ:すべて  割り込み状態:割り込み許可 <機能>  演奏のための1/60秒割り込み処理をします。MPLAY1やMPLAY2な どをコールしてから、割り込み処理からここにコールできるようにフックの書き換 え等を行ってください。 ・MSTOP (602CH)  入力レジスタ:無し  出力レジスタ:無し  破壊レジスタ:すべて  割り込み状態:割り込み許可 <機能>  演奏を終了します。  なお、ここをコールしてから、割り込みフックを元に戻してください。 ・FADOUT (602FH)  入力レジスタ:A (フェードアウトの速さ(1〜63))  出力レジスタ:無し  破壊レジスタ:無し  割り込み状態:割り込み禁止 <機能>  フェードアウトして演奏を終了します。Aレジスタに入る数値は小さいほど、フ ェードアウトスピードが速くなります。  なお、ここをコールしてから、後述の演奏フラグチェックのエントリーをコール して、演奏が完了したことを確認してから、割り込みフックを元に戻してください。  なお、MMLのUおよびHで発生する音はフェードアウトしません(当たり前)。 ・PLYCHK(6032H)  入力レジスタ:無し  出力レジスタ:A ビット0が1で曲を演奏中 ビット1が1でポーズは掛かっていない HL 現在の演奏回数  破壊レジスタ:すべて  割り込み状態:不変 <機能>  様々な演奏状態を得ます。  まず。Aレジスタですが、ポーズされていても演奏中であるかだけを調べるだけ でしたら、このレジスタが0であるか否かだけをチェックすればいいです。  なお、ビット0はポーズ中でも1になっていますので、演奏中ということになっ ています。  そして、HLですが、最初は1から始まって、65535になった次は0に戻っ てしまいます。  ですから、ミュージックプレイヤーを製作されている人で1回だけ演奏して、2 回目はフェードアウトして消えるとかいう事をしたい場合はHLが2になったら、 フェードアウトさせたらOKです(MuPLAYでも似たことをしています)。 ・PAUREP(6035H)  入力レジスタ:無し  出力レジスタ:無し  破壊レジスタ:すべて  割り込み状態:割り込み禁止 <機能>  ここを呼ぶ度にポーズ・リプレイが切り変わります。  なお、演奏開始した時は前の演奏でポーズ状態で演奏を停止しても、ポーズ状態 はキャンセルされています。 ・ALLMVO(6038H)  入力レジスタ:A マスターボリューム値(0〜15)  出力レジスタ:無し  破壊レジスタ:すべて  割り込み状態:割り込み禁止(ただし、成功時) <機能>  マスターボリュームを全チャンネル変えます。  Aレジスタに入れる数値は小さい程、音量が大きくなります。  なお、デフォルトは0で、範囲を越えた数値を入れた場合は何もせず戻ってきま す(そのときの割り込み状態は不変です)。 ・PATMVO(603BH)  入力レジスタ:A マスターボリューム値(0〜15) C 変えたいチャンネル(0〜16)  出力レジスタ:無し  破壊レジスタ:すべて  割り込み状態:割り込み禁止(ただし、成功時) <機能>  前述のマスターボリューム値を変えるものの各チャンネル版で、これを使うと各 チャンネルごとに変えることができます。  ただし、これで設定した後、ALLMVOで音量を変えた場合はそれで設定した 値になります。要するに、もしこれで各チャンネルごとに同じ音量を設定したいと きに面倒になりますので(17回コールしないといけませんから)、その手間を省 くために作ったのがALLMVOです。  ちなみにチャンネルの番号ですが、FM音源が0〜8(リズム使用時、リズムは 6)、PSG音源が9〜11、SCC音源が12〜16となっています。  なお、AおよびBレジスタの範囲が越えていた場合は何もせずに帰ってきます (そのときの割り込み状態は不変です)。 ・PSGOUT(603EH)  入力レジスタ:B PSG出力のON(0)/OFF(1) ビット0でPSG1  出力レジスタ:無し  破壊レジスタ:すべて  割り込み状態:割り込み禁止 <機能>  PSGの出力スイッチです。  ゲーム中に効果音などを鳴らすとき、演奏でPSGに出力してほしくない場合に 使います。 ・CPYRIT(6041H)  入力レジスタ:無し  出力レジスタ:HL 著作権表示用文字列の先頭アドレス  破壊レジスタ:すべて  割り込み状態:不変 <機能>  勤労5号の著作権表示用文字列をGETします。  形式はMSX−DOSのBDOSのファンクションコール09Hで表示させる時 の形式と全く同じですので、終了のマークとして「$」を使用しています。  しかし、トップレジスタを返しているレジスタがHLレジスタですので、DEレ ジスタに入れて直して、Cレジスタに9Hを入れて、BDOSにコールすればOK です(ただし、勤労5号の入っているスロットが選択されていないとダメです)。 ・GETWOK(6044H)  入力レジスタ:無し  出力レジスタ:IX 各チャンネルのワークエリアの先頭アドレス HL 上記ワークエリアの1チャンネル当たりのワークエリア の大きさ IY PSG&SCCのエンベロープ関連ワークエリアの先頭 アドレス DE 上記ワークエリアの1チャンネル当たりのワークエリア の大きさ  破壊レジスタ:すべて  割り込み状態:不変 <機能>  ワークエリアのアドレスなどをGETすることができます。  ワークエリアの細部の説明は正直言って無意味ですので、いたしません。  プレイヤーを製作して、音量や発音情報を知りたいためにワークエリアの参照が どうしても必要な方は黒田まで連絡下さい。 ・GETPAR(6047H)  入力レジスタ:HL BGMデータの置いている先頭アドレス C 得たいパラメ−タ番号  出力レジスタ:Cフラグ 1でBGMデータから得られない その他、パラメータ番号によって変化  破壊レジスタ:すべて  割り込み状態:不変 <機能>  この機能は勤労5号バ−ジョン1.00以降でのみ使えます。  Cレジスタに番号を入れることによって得たいパラメ−タを得ます。  *C=1の時   入力レジスタ:HL コンパイルした時のアドレス   <説明>   HLレジスタにコンパイル時に設定したアドレスが入っています。  *C=2の時   入力レジスタ:HL タイトルの入っている先頭アドレス   <説明>   HLレジスタの示すアドレスからタイトルが入っています。   そのアドレスから00Hが入っているアドレスまでが、タイトルです。  *C=3の時   入力レジスタ:HL メモの入っている先頭アドレス   <解説>   HLレジスタの示アドレスからメモが入っています。   そのアドレスから00Hがはいっているアドレスまでが、メモです ・GETFAR(604AH)  入力レジスタ:なし  出力レジスタ:なし  破壊レジスタ:すべて  割り込み状態:割り込み許可 <機能>  勤労ファンファーレ(以後、勤レと略)を演奏します。  勤レには7種類ありますが、どれが演奏されるかは、一番最初のイニシャライズ の時に、ランダムで決定されます。 ------------------ ☆カラオケについて ------------------  勤労規格では、カラオケデータのフォーマットを「P.Y.F.」が発表してい るKARASYS(仮称)に準拠するとします。  データフォーマットに関しましては、KARASYS(仮称)同封の規格書を参 照してください。 -------------- ☆紹介終わって --------------  以上が勤労5号の公開ワークエリアおよびエントリーです。  多分、分かりにくい説明だったと思いますが、こんなもんでご勘弁ください。  皆様からの質問などからこの文章もよりよいものに仕上がっていくと思います。 ---------- ☆質問など ----------  え〜、質問などは私までお手紙ください。  送る際の手続きの方法は勤労5号のドキュメントを参照してください。 〒571 大阪府 門真市 大倉町 6−3 (おおさかふ かどまし おおくらちょう) 黒田 圭一 (くろだ けいいち) Illusion Net City ID:KURODA ハンドル:黒田 圭一(仮名) Msx N.P ID:KURODA ハンドル:黒田 圭一(仮称) Do-RAGON NET City ID:KURODA ハンドル:黒田 圭一 ray-net ID:RAY081 ハンドル:黒田 圭一(匿名) PP-NET ID:KURODA ハンドル:黒田 圭一(推定) げぬいねっと ID:GENU0076 ハンドル:黒田 圭一(以下略) DDねっと ID:DNET0004 ハンドル:黒田 圭一(偽名) E-mail:kuroda@g-net.org -------- ☆最後に --------  え〜、勤労5号の解説はこれくらいにします。  文章途中にも書きましたが、皆さんからいろいろと質問をしていただけたら、そ ういった部分が分からないという事も分かりますので、その部分の文章の追加など ができて、よりよい規格書ができます。そんな点から、この規格書も下手すれば、 毎日変わっているかもしれません(もちろんよりよくなってです)。  という訳で、皆さんからのお手紙などをお待ちしています。  それでは、さようなら BTO首謀者・BTO MuSICA研究所研究員 黒田 圭一